#Copyright (c) 2012-8 Civa Lin. All rights reserved.
"""
Develop 開發時期除錯工具模組

如果要使用，本模組應該儘可能優先地被 import，且最好不要被引入程式的
最終釋出版中（雖然這麼做也無害）。
"""



_init_modules = None

def re_idle():
    '''讓以 idle 直譯器運行時，每次運行均能重新載入所有模組

        第一次執行時，會登錄當前所使用過的所有模組。
        之後執行時，會重載所有之前沒登錄過的模組。
        若 idlelib 未載入，本函式為空操作。

        使用須知：
            1. 必須在純淨的 idle 環境下第一次執行（初始化）。這表示……
                1. 若在 shell 模式下，請在執行其他指令前先執行這個
                2. 若在 script 中，必須儘可能放在其他 import 前面
        '''
    import sys
    if 'idlelib' not in sys.modules.keys():
        return
    global _init_modules
    if _init_modules is None: # 第一次執行時，登錄當前使用的模組
        _init_modules = tuple(m for m in sys.modules.keys())
    else: # 第二次以後執行，第一次登錄後載入的所有模組
        for m in [x for x in sys.modules.keys() if x not in _init_modules]:
            del(sys.modules[m])
    # 回收剛用過的模組
    if 'sys' not in _init_modules:
        del(sys.modules['sys'])

re_idle() # 先執行一次以防忘記……
